const cartModel = require('../db/cart')
const menuModel = require('../db/menu')
const orderModel = require("../db/order")
// orderno:String,//订单号
//     time:Date,
//     mode:String,//吃的模式，堂食或打包
//     menuname:String,//商品名称
//     code:String,//取餐码
//     totalprice:String,//总价
//     status:String,//订单状态
module.exports = {

    // 获取订单
    getallorder(req, res) {
        // resful风格获取用户id
        let { userid } = req.params
        // 查询
        orderModel.find({ userid }, { __v: 0 }, (err, docs) => {
            if (err) {
                throw new Error(err)
            }
            console.log(docs);
            res.json({
                error_code: 0,
                msg: '成功获取订单',
                data: docs
            })
        })
    },
    // 订单支付
    createorder(req, res) {
        // ids,存放所有购物车id
        // mode接收结算的时候选择的进食方式 -> 堂食/打包
        // totalprice接收结算的时候总价
        //  userid用户id
        let { ids, mode, totalprice, userid } = req.body
        ids = ids.split(',') // 分割为一个数组
        // 到购物车表中查询所有的购物车数据,某个键 在 某个数组中{键: {$in: [值, 值]}}
        cartModel.find({ _id: { $in: ids } }, (err, docs) => {
            if (err) {
                throw new Error(err)
            }
            // console.log(docs) // [{_id: XX, menuid: xxx, userid:xxx,num:xx, ...}, {}]，
            // 从数组中获取到所有的商品id
            let menuids = docs.map(item => item.menuid) // [商品id, 商品id]
            // console.log(menuids);//得到商品id，
            // 通过多个商品id查询在菜单表里的所有商品数据,
            menuModel.find({ _id: { $in: menuids } }, (err, docs) => {
                if (err) {
                    throw new Error(err)
                }
                // console.log(docs); // [{_id: XX, name: xxx, price:xxx,imgpath:xx, ...}, {}]
                // // 获取第一个商品的名称
                let menuname = docs[0].name
                // console.log(menuname);
                // 生成订单号
                let orderno = +new Date() + Math.floor(Math.random() * 899999) + 100000
                // 定义订单状态
                let status = '已支付'
                // 添加取餐码
                // 生成今天的开始时间戳和今天的结束时间戳
                let now = +new Date() // 当前时间戳
                let day = now / 1000 / 60 / 60 / 24
                let start = Math.floor(day) * 1000 * 60 * 60 * 24
                let end = Math.ceil(day) * 1000 * 60 * 60 * 24
                console.log(start,end); 
                // 查询订单表，找到在这个时间段的最后一个数据
                orderModel.find({ time: { $gt: start, $lt: end } }, (err, docs) => {
                    if (err) {
                        throw new Error(err)
                    }
                    console.log(docs);
                    // 判断查询出来的数据数量
                    if (docs.length) {
                        // 取餐码是数量 + 1
                        code = docs.length + 1
                        // 取餐码设定4位数，不够4位数的前面补0
                        if (code < 10) {
                            code = '000' + code
                        } else if (code < 100) {
                            code = '00' + code
                        } else if (code < 1000) {
                            code = '0' + code
                        }
                    } else {
                        // 如果今天还没有数据，取餐码为1
                        code = '0001'
                    }
                    // 将数据添加到订单表
                    orderModel.insertMany({
                        orderno,
                        mode,
                        menuname,
                        code,
                        totalprice,
                        status,
                        userid,
                        time: +new Date()//当前添加的时间
                    }, (err, docs) => {
                        if (err) {
                            throw new Error(err)
                        }
                        // 删除购物车表的数据
                        cartModel.deleteMany({ _id: { $in: ids } }, (err, docs) => {
                            if (err) {
                                throw new Error(err)
                            }
                            res.json({
                                error_code: 0,
                                msg: '支付成功！'
                            })
                        })
                    })
                })
            })
        })

    }

}